package com.bestcem.xm.member.dao;

import com.bestcem.xm.member.entity.pojo.ExtendFieldDO;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;

/**
 * 扩展字段持久层接口
 *
 * @author dc.wang <dc.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/7/13
 */
public interface ExtendFieldDao {

    /**
     * 查询是否存在字段名
     *
     * @param orgId 企业标识
     * @param names 字段名
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/7/20
     */
    List<ExtendFieldDO> findByNames(String orgId, Integer memberType, Collection<String> names);

    /**
     * 获取联系人所有扩展字段
     *
     * @param orgId      企业标识
     * @param memberType 联系人类型
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/7/20
     */
    List<ExtendFieldDO> listMemberExtendField(String orgId, Integer memberType);

    /**
     * 批量创建扩展字段
     *
     * @param extendFields 扩展字段集合
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/7/20
     */
    Integer batchInsertField(@NotEmpty List<ExtendFieldDO> extendFields);

    /**
     * 批量删除扩展字段
     *
     * @param orgId 企业标识
     * @param ids   扩展字段标识集合
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/7/20
     */
    Integer batchDeleteFieldByIds(@NotNull String orgId, @NotEmpty Collection<String> ids);

    /**
     * 批量更新联系人扩展字段
     *
     * @param updateFields 扩展字段信息
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/7/20
     */
    void batchUpdateFields(@NotEmpty List<ExtendFieldDO> updateFields);

    /**
     * 查询数据
     *
     * @param name
     * @param orgId
     * @param attribute
     * @return
     */
    ExtendFieldDO findOneByNameAndOrgIdAndAttribute(String name, String orgId, Integer attribute);

    /**
     * 根据id列表获取扩展字段信息
     *
     * @param ids
     */
    List<ExtendFieldDO> findByIds(Collection<String> ids);

    /**
     * 根据组织id 联系人类型 扩展字段name查询数量
     *
     * @param orgId
     * @param attribute
     * @param name
     * @return
     */
    Integer countByOrgIdAndMemberTypeAndName(String orgId, Integer attribute, String name);

    List<ExtendFieldDO> listByOrgIdAndMemberTypes(String orgId, List<Integer> memberTypes);
}
